# -*- coding: utf-8 -*-
# @Time: 2024/11/1 3:25
# @Author: foxhuty
# @File: asyncio_notes.py
import asyncio
import time


async def do_something():
    l = []
    for i in range(10000):
        l.append(i ** 3)
    print(len(l))
    print("finished")
    await asyncio.sleep(1)


# 只会返回一个 coroutine 对象，并不会执行函数
# def main():
#     do_something()
#
#
# # 要用 run 来执行
# asyncio.run(do_something())


# 或者在别的异步函数中调用
async def main():
    await do_something()  # 异步函数通过 await 来调用，await 只能放在 async 函数内


asyncio.run(main())
# 如果我们需要同时执行多个异步函数，我们需要将异步函数定义为 task。
# 我们可以使用 asyncio.create_task 来创建 task，然后使用 await 关键字来启动所有的 task：
# async def main():
#
#     print(f"started at {time.strftime('%X')}")
#     task1 = asyncio.create_task(do_something_cost_time("WashClothes", 2))
#     task2 = asyncio.create_task(do_something_cost_time("WatchTV", 5))
#     task3 = asyncio.create_task(do_something_cost_time("FeedBaby", 3))
#     await task1
#     await task2
#     await task3
#     print(f"finished at {time.strftime('%X')}")
# asyncio.run(main())


'''我们也可以使用asyncio.gather的
    方式同时定义并执行tasks：'''
# async def main1():
#
#     await asyncio.gather(
#         do_something_cost_time("WashClothes", 2),
#     do_something_cost_time("WatchTV", 5),
#     do_something_cost_time("FeedBaby", 3),
#     )
#
# asyncio.run(main1())
